﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace VideoLink.Frames
{
    /// <summary>
    /// Представляет "срез" всех потоков видео.
    /// Инкапсулирует все данные, которые передаются на данном кадре.
    /// </summary>
    [Serializable]
    public class Frame
    {
        /// <summary>
        /// Суммарное количество изменений в состоянии трансляции на данном кадре
        /// </summary>
        public int ChangesCount
        {
            get
            {
                return NewlyAdded.Count
                    + JustDeleted.Count
                    + Running.Count;
            }
        }

        /// <summary>
        /// Описание потоков, которые только что были созданы
        /// </summary>
        public List<VideoStreamInfo> NewlyAdded { get; private set; }

        /// <summary>
        /// Список ID потоков, которые только что были удалены
        /// </summary>
        public List<int> JustDeleted { get; private set; }

        /// <summary>
        /// Состояние потоков, которые находятся в режиме воспроизведения сейчас.
        /// </summary>
        public List<VideoStreamState> Running { get; private set; }

        /// <summary>
        /// Создать экземпляр данного класса с пустым NewlyAdded
        /// </summary>
        public Frame()
        {
            NewlyAdded = new List<VideoStreamInfo>();
            JustDeleted = new List<int>();
            Running = new List<VideoStreamState>();
        }

        /// <summary>
        /// Создать экземпляр данного класса с указанным NewlyAdded
        /// </summary>
        /// <param name="newlyAdded">
        /// Описание потоков, которые только что были созданы
        /// </param>
        /// <param name="running">
        /// Состояние потоков, которые находятся в режиме воспроизведения сейчас.
        /// </param>
        /// <param name="deleted">
        /// Список ID потоков, которые только что были удалены
        /// </param>
        public Frame(List<VideoStreamInfo> newlyAdded, List<VideoStreamState> running, List<int> deleted)
        {
            NewlyAdded = newlyAdded;
            Running = running;
            JustDeleted = deleted;
        }
    }
}
